package com.biz.redis.init;

import com.biz.redis.util.*;
import org.springframework.boot.*;
import org.springframework.context.*;
import org.springframework.stereotype.*;

import java.util.*;

/**
 * @Description
 *  CommandLineRunner 项目启动的时候执行
 * @Author liuxi
 * @Date 2024/4/21
 **/
@Component
public class InitCache implements CommandLineRunner {

    /**
     * 项目启动的时候执行
     */
    @Override
    public void run(String... args) throws Exception {
        // 知道那些缓存需要预热 找到容器里相关的东西
        ApplicationContext applicationContext = SpringContextUtil.getApplicationContext();
        Map<String, AbstractCache> beanMap = applicationContext.getBeansOfType(AbstractCache.class);
        // 调用init方法
        if (beanMap.isEmpty()) {
            return;
        }
        for (Map.Entry<String, AbstractCache> entry : beanMap.entrySet()) {
            AbstractCache abstractCache = (AbstractCache) SpringContextUtil.getBean(entry.getValue().getClass());
            abstractCache.initCache();
        }
    }
}
